<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>SystemSharp: AsyncStateMachineHelpers.cs Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">SystemSharp
   &#160;<span id="projectnumber">0.3</span>
   </div>
   <div id="projectbrief">A system-level modeling framework for designing real-time embedded systems</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="namespaces.html"><span>Packages</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_async_state_machine_helpers_8cs_source.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Properties</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Events</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">AsyncStateMachineHelpers.cs</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_async_state_machine_helpers_8cs.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div>
<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="keyword">using</span> System;</div>
<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="keyword">using</span> System.Collections.Generic;</div>
<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">using</span> System.Linq;</div>
<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="keyword">using</span> System.Reflection;</div>
<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">using</span> System.Reflection.Emit;</div>
<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">using</span> System.Text;</div>
<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keyword">using</span> System.Threading.Tasks;</div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">using</span> SDILReader;</div>
<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">using</span> SystemSharp.Meta;</div>
<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">using</span> SystemSharp.SysDOM;</div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">using</span> SystemSharp.SysDOM.Transformations;</div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;</div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="keyword">namespace </span>SystemSharp.Analysis</div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;{</div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_join_params.html">   37</a></span>&#160;    <span class="keyword">class </span><a class="code" href="class_system_sharp_1_1_analysis_1_1_join_params.html">JoinParams</a></div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    {</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_join_params.html#ab3cabcdfbe936a1749691b5b9bfefa2f">   39</a></span>&#160;        <span class="keyword">public</span> Task JoinedTask { <span class="keyword">get</span>; set; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_join_params.html#aba8a6243dec45b66006954607e81aeb4">   40</a></span>&#160;        <span class="keyword">public</span> <a class="code" href="class_system_sharp_1_1_analysis_1_1_state_info.html">StateInfo</a> Continuation { <span class="keyword">get</span>; set; }</div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    }</div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html">   46</a></span>&#160;    <span class="keyword">class </span><a class="code" href="class_system_sharp_1_1_analysis_1_1_state_info.html">StateInfo</a></div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    {</div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html#a2e6e004129367cae06856caf2e037d55">   48</a></span>&#160;        <span class="keyword">public</span> <span class="keywordtype">int</span> ILState { <span class="keyword">get</span>; <span class="keyword">private</span> set; }</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html#a7cbda053859cac642a2dfa23e615bc00">   49</a></span>&#160;        <span class="keyword">public</span> <span class="keywordtype">bool</span> HasWaitState { <span class="keyword">get</span>; set; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html#a60ef3c987b76388798f6bcd59dd525b3">   50</a></span>&#160;        <span class="keyword">public</span> Dictionary&lt;string, object&gt; LVState { <span class="keyword">get</span>; <span class="keyword">private</span> set; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html#a7d052cceed0d579a8d51aeaf57b5d32c">   51</a></span>&#160;        <span class="keyword">public</span> <span class="keywordtype">object</span> StateValue { <span class="keyword">get</span>; set; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html#a23568fcfc649bb58e8112a4c5dae4184">   52</a></span>&#160;        <span class="keyword">public</span> <span class="keywordtype">object</span> WaitStateValue { <span class="keyword">get</span>; set; }</div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html#ab6e06c22923dae76a6653b97627ffe90">   53</a></span>&#160;        <span class="keyword">public</span> <a class="code" href="class_system_sharp_1_1_analysis_1_1_join_params.html">JoinParams</a> JP { <span class="keyword">get</span>; set; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html#aab0b44ce04a61cb8ddd3d64f34549a30">   54</a></span>&#160;        <span class="keyword">public</span> <a class="code" href="interface_system_sharp_1_1_analysis_1_1_i_decompilation_result.html">IDecompilationResult</a> Result { <span class="keyword">get</span>; set; }</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html#af9fa637972f7f9abd6dc7e0b9ce28db8">   56</a></span>&#160;        <span class="keyword">public</span> <a class="code" href="class_system_sharp_1_1_analysis_1_1_state_info.html#af9fa637972f7f9abd6dc7e0b9ce28db8">StateInfo</a>(<span class="keywordtype">int</span> ilState)</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        {</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;            ILState = ilState;</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;            LVState = <span class="keyword">new</span> Dictionary&lt;string, object&gt;();</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;        }</div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div>
<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html#acc7f4209e0db0fda4f3c4aaf2a690008">   62</a></span>&#160;        <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> <a class="code" href="class_system_sharp_1_1_analysis_1_1_state_info.html#acc7f4209e0db0fda4f3c4aaf2a690008">Equals</a>(<span class="keywordtype">object</span> obj)</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;        {</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;            var other = obj as <a class="code" href="class_system_sharp_1_1_analysis_1_1_state_info.html">StateInfo</a>;</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;            <span class="keywordflow">if</span> (other == null)</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;            <span class="keywordflow">return</span> other.ILState == ILState <span class="comment">/*&amp;&amp;</span></div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment">                    LVState.Values.SequenceEqual(other.LVState.Values)*/</span>;</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;        }</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div>
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html#a7d2942457d7497caabcef32d192c9ac3">   72</a></span>&#160;        <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> <a class="code" href="class_system_sharp_1_1_analysis_1_1_state_info.html#a7d2942457d7497caabcef32d192c9ac3">GetHashCode</a>()</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;        {</div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;            <span class="keywordflow">return</span> ILState.GetHashCode() <span class="comment">/*^ </span></div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="comment">                    LVState.Values.GetSequenceHashCode()*/</span>;</div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        }</div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;</div>
<div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html#a11a17a2892aba352521bf0104f73c9d9">   78</a></span>&#160;        <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">string</span> <a class="code" href="class_system_sharp_1_1_analysis_1_1_state_info.html#a11a17a2892aba352521bf0104f73c9d9">ToString</a>()</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        {</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;            <span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;&quot;</span> + ILState + <span class="stringliteral">&quot;| &quot;</span> + string.Join(<span class="stringliteral">&quot;,&quot;</span>, LVState.Select(kvp =&gt; kvp.Key + <span class="stringliteral">&quot;=&quot;</span> + kvp.Value)) + <span class="stringliteral">&quot;&gt;&quot;</span>;</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        }</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_info.html#a2c609a341d466fba051b3cf317439d37">   83</a></span>&#160;        <span class="keyword">public</span> <a class="code" href="class_system_sharp_1_1_analysis_1_1_state_info.html">StateInfo</a> <a class="code" href="class_system_sharp_1_1_analysis_1_1_state_info.html#a2c609a341d466fba051b3cf317439d37">Fork</a>(<span class="keywordtype">int</span> ilState)</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;        {</div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;            var fork = <span class="keyword">new</span> <a class="code" href="class_system_sharp_1_1_analysis_1_1_state_info.html">StateInfo</a>(ilState);</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;            <span class="keywordflow">foreach</span> (var kvp <span class="keywordflow">in</span> LVState)</div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;                fork.LVState[kvp.Key] = kvp.Value;</div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;            <span class="keywordflow">if</span> (ilState == ILState &amp;&amp; HasWaitState)</div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;            {</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;                fork.HasWaitState = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;                fork.JP = JP;</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;            }</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;            <span class="keywordflow">return</span> fork;</div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;        }</div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    }</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div>
<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_proceed_with_state_info.html">  100</a></span>&#160;    <span class="keyword">class </span><a class="code" href="class_system_sharp_1_1_analysis_1_1_proceed_with_state_info.html">ProceedWithStateInfo</a></div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    {</div>
<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_proceed_with_state_info.html#ad4b167eb42c015e66ab4329173da3823">  102</a></span>&#160;        <span class="keyword">public</span> <a class="code" href="class_system_sharp_1_1_analysis_1_1_state_info.html">StateInfo</a> TargetState { <span class="keyword">get</span>; set; }</div>
<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_proceed_with_state_info.html#a4e7fb4661b7cd80c2ae1d3cbc0b17c7e">  103</a></span>&#160;        <span class="keyword">public</span> <span class="keywordtype">bool</span> TargetWaitState { <span class="keyword">get</span>; set; }</div>
<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_proceed_with_state_info.html#a1730b3730721daaa97a6d75dae999ce8">  104</a></span>&#160;        <span class="keyword">public</span> <span class="keywordtype">bool</span> LambdaTransition { <span class="keyword">get</span>; set; }</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;</div>
<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_proceed_with_state_info.html#ab4bd00bfc13b96df79cfa9ee5781ff9f">  106</a></span>&#160;        <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">string</span> <a class="code" href="class_system_sharp_1_1_analysis_1_1_proceed_with_state_info.html#ab4bd00bfc13b96df79cfa9ee5781ff9f">ToString</a>()</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        {</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;            <span class="keywordtype">string</span> text = <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;            <span class="keywordflow">if</span> (LambdaTransition)</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;                text += <span class="stringliteral">&quot;lambda &quot;</span>;</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;            text += <span class="stringliteral">&quot;to &quot;</span>;</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;            <span class="keywordflow">if</span> (TargetWaitState)</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;                text += <span class="stringliteral">&quot;wait &quot;</span>;</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;            text += <span class="stringliteral">&quot;state &quot;</span>;</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;            text += TargetState.ILState;</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;            <span class="keywordflow">return</span> text;</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        }</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    }</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;</div>
<div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html">  123</a></span>&#160;    <span class="keyword">class </span><a class="code" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html">CoFSM</a></div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    {</div>
<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#af50c75c629929330cd001b704e9d31ec">  125</a></span>&#160;        <span class="keyword">public</span> Task <a class="code" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#af50c75c629929330cd001b704e9d31ec">CoTask</a>;</div>
<div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a629ebbae6807ec1ba222899b70309552">  126</a></span>&#160;        <span class="keyword">public</span> ISet&lt;Task&gt; <a class="code" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a629ebbae6807ec1ba222899b70309552">Dependencies</a>;</div>
<div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#aad19cb7a3f9ddd9f1767e060607c11be">  127</a></span>&#160;        <span class="keyword">public</span> <a class="code" href="class_system_sharp_1_1_meta_1_1_method_descriptor.html">MethodDescriptor</a> <a class="code" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#aad19cb7a3f9ddd9f1767e060607c11be">Method</a>;</div>
<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a4e09b0629b5e455ea5729a8de65bf060">  128</a></span>&#160;        <span class="keyword">public</span> <a class="code" href="class_system_sharp_1_1_sys_d_o_m_1_1_variable.html">Variable</a>[] <a class="code" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a4e09b0629b5e455ea5729a8de65bf060">Arguments</a>;</div>
<div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#acc4c07bc72fc60e06c55143886abe59b">  129</a></span>&#160;        <span class="keyword">public</span> <a class="code" href="class_system_sharp_1_1_sys_d_o_m_1_1_variable.html">Variable</a> <a class="code" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#acc4c07bc72fc60e06c55143886abe59b">ResultVar</a>;</div>
<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#aa8dd7798c73563fb14aa00777fdee3ed">  130</a></span>&#160;        <span class="keyword">public</span> <a class="code" href="class_system_sharp_1_1_sys_d_o_m_1_1_variable.html">Variable</a> <a class="code" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#aa8dd7798c73563fb14aa00777fdee3ed">DoneVar</a>;</div>
<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a5f1f40f0bb2bdbfc75950f55d3a3d6de">  131</a></span>&#160;        <span class="keyword">public</span> List&lt;Variable&gt; <a class="code" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a5f1f40f0bb2bdbfc75950f55d3a3d6de">StateActiveVars</a>;</div>
<div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a66e4114b306fd5b4be7da2b8c3ed298e">  132</a></span>&#160;        <span class="keyword">public</span> <a class="code" href="class_system_sharp_1_1_sys_d_o_m_1_1_statement.html">Statement</a> <a class="code" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a66e4114b306fd5b4be7da2b8c3ed298e">InitialHandler</a>;</div>
<div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a362133fe9c61244ad4cfd86b0371e0c6">  133</a></span>&#160;        <span class="keyword">public</span> <a class="code" href="class_system_sharp_1_1_sys_d_o_m_1_1_statement.html">Statement</a> <a class="code" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a362133fe9c61244ad4cfd86b0371e0c6">HandlerBody</a>;</div>
<div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a534507292552a45f828fc5ef9c93601f">  134</a></span>&#160;        <span class="keyword">public</span> ICollection&lt;MethodCallInfo&gt; <a class="code" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a534507292552a45f828fc5ef9c93601f">CalledMethods</a>;</div>
<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a4930ff595c91c60e9c4c8f0eadb19463">  135</a></span>&#160;        <span class="keyword">public</span> <span class="keywordtype">int</span> <a class="code" href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a4930ff595c91c60e9c4c8f0eadb19463">Order</a>;</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    }</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;</div>
<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms.html">  141</a></span>&#160;    <span class="keyword">struct </span><a class="code" href="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms.html">CoFSMs</a></div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    {</div>
<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms.html#a7b27742a238ce2a054511fd129fe47a0">  143</a></span>&#160;        <span class="keyword">public</span> Dictionary&lt;Task, CoFSM&gt; <a class="code" href="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms.html#a7b27742a238ce2a054511fd129fe47a0">Map</a>;</div>
<div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms.html#ab17d0f878ab09b9bb7a8435957aae3d5">  144</a></span>&#160;        <span class="keyword">public</span> List&lt;CoFSM&gt; <a class="code" href="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms.html#ab17d0f878ab09b9bb7a8435957aae3d5">Order</a>;</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keyword">private</span> <span class="keywordtype">int</span> PostOrderDFS(Task task, <span class="keywordtype">int</span> cur)</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        {</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;            var cofsm = Map[task];</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;            var deps = cofsm.Dependencies;</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;            <span class="keywordflow">foreach</span> (var dep <span class="keywordflow">in</span> deps)</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;            {</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;                var depco = Map[dep];</div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;                <span class="keywordflow">if</span> (depco.Order == 0)</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;                    cur = PostOrderDFS(depco.CoTask, cur);</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;            }</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;            cofsm.Order = ++cur;</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;            <span class="keywordflow">return</span> cur;</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        }</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;</div>
<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms.html#a3ef4f957ec1640579fd5acb0e4630843">  160</a></span>&#160;        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms.html#a3ef4f957ec1640579fd5acb0e4630843">CreateOrder</a>()</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        {</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;            <span class="keywordtype">int</span> cur = 0;</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;            <span class="keywordflow">foreach</span> (var task <span class="keywordflow">in</span> Map.Keys)</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;                cur = PostOrderDFS(task, cur);</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;            Order = Map.Values.OrderBy(v =&gt; v.Order).ToList();</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        }</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    }</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;</div>
<div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_target_finder.html">  169</a></span>&#160;    <span class="keyword">static</span> <span class="keyword">class </span><a class="code" href="class_system_sharp_1_1_analysis_1_1_state_target_finder.html">StateTargetFinder</a></div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    {</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        <span class="keyword">enum</span> EStateLocMode</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;        {</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;            LocatingStateField,</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;            LocatingStateLocal</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        }</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> IsLdc_I(<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html">ILInstruction</a> cili, out <span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        {</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;            <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldc_I4)</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;            {</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;                value = (int)cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#aad0d860f180f9616294ab5c9977d71a9">Operand</a>;</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;            }</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldc_I4_0)</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;            {</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;                value = 0;</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;            }</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldc_I4_1)</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;            {</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;                value = 1;</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;            }</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldc_I4_2)</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;            {</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;                value = 2;</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;            }</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldc_I4_3)</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;            {</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;                value = 3;</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;            }</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldc_I4_4)</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;            {</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;                value = 4;</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;            }</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldc_I4_5)</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;            {</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;                value = 5;</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;            }</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldc_I4_6)</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;            {</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;                value = 6;</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;            }</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldc_I4_7)</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;            {</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;                value = 7;</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;            }</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldc_I4_8)</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;            {</div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;                value = 8;</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;            }</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldc_I4_M1)</div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;            {</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;                value = -1;</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;            }</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldc_I4_S)</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;            {</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;                value = (sbyte)cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#aad0d860f180f9616294ab5c9977d71a9">Operand</a>;</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;            }</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;            value = int.MaxValue;</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;        }</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> IsStloc(<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html">ILInstruction</a> cili, out <span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        {</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;            <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Stloc)</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;            {</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;                value = (int)cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#aad0d860f180f9616294ab5c9977d71a9">Operand</a>;</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;            }</div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Stloc_S)</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;            {</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;                value = (byte)cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#aad0d860f180f9616294ab5c9977d71a9">Operand</a>;</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;            }</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Stloc_0)</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;            {</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;                value = 0;</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;            }</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Stloc_1)</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;            {</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;                value = 1;</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;            }</div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Stloc_2)</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;            {</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;                value = 2;</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;            }</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Stloc_3)</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;            {</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;                value = 3;</div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;            }</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;            value = int.MaxValue;</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;        }</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> IsLdloc(<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html">ILInstruction</a> cili, out <span class="keywordtype">int</span> value)</div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;        {</div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;            <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldloc)</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;            {</div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;                value = (int)cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#aad0d860f180f9616294ab5c9977d71a9">Operand</a>;</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;            }</div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldloc_S)</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;            {</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;                value = (byte)cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#aad0d860f180f9616294ab5c9977d71a9">Operand</a>;</div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;            }</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldloc_0)</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;            {</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;                value = 0;</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;            }</div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldloc_1)</div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;            {</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;                value = 1;</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;            }</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldloc_2)</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;            {</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;                value = 2;</div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;            }</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.<a class="code" href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">Code</a> == OpCodes.Ldloc_3)</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;            {</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;                value = 3;</div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;            }</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;            value = int.MaxValue;</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;        }</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;</div>
<div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="class_system_sharp_1_1_analysis_1_1_state_target_finder.html#af77c14655a6c79277e3e4060e6376c88">  325</a></span>&#160;        <span class="keyword">public</span> <span class="keyword">static</span> <a class="code" href="class_system_sharp_1_1_analysis_1_1_m_s_i_l_code_block.html">MSILCodeBlock</a>[] <a class="code" href="class_system_sharp_1_1_analysis_1_1_state_target_finder.html#af77c14655a6c79277e3e4060e6376c88">FindStateTargets</a>(<a class="code" href="class_system_sharp_1_1_analysis_1_1_method_code.html">MethodCode</a> cfg)</div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;        {</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;            var entry = cfg.BasicBlocks[0];</div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;            FieldInfo statefield = null;</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;            <span class="keywordtype">int</span> stateLocalIndex = -1;</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;            <span class="keywordtype">int</span> stateValue = int.MinValue;</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;            <span class="keywordtype">int</span> stateOffset = 0;</div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;            var mode = EStateLocMode.LocatingStateField;</div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;            var q = <span class="keyword">new</span> Queue&lt;Tuple&lt;int, MSILCodeBlock&gt;&gt;();</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;            <span class="keywordflow">foreach</span> (var cili <span class="keywordflow">in</span> entry.Range)</div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;            {</div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;                <span class="keywordflow">switch</span> (mode)</div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;                {</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;                    <span class="keywordflow">case</span> EStateLocMode.LocatingStateField:</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;                        <span class="keywordflow">if</span> (cili.Code == OpCodes.Ldfld)</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;                        {</div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;                            <span class="comment">// this must be the state field</span></div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;                            statefield = (FieldInfo)cili.Operand;</div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;                            mode = EStateLocMode.LocatingStateLocal;</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;                        }</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;                        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;</div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;                    <span class="keywordflow">case</span> EStateLocMode.LocatingStateLocal:</div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;                        {</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;                            <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;                            <span class="keywordflow">if</span> (IsStloc(cili, out index))</div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;                                stateLocalIndex = index;</div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;                        }</div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;                        <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;                }</div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;                <span class="keywordtype">int</span> value;</div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;                <span class="keywordflow">if</span> (IsLdc_I(cili, out value))</div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;                {</div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;                    stateValue = value;</div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;                }</div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;</div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;                <span class="keywordflow">if</span> (cili.Code == OpCodes.Sub)</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;                {</div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;                    stateOffset = stateValue;</div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;                }</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;                <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.Code == OpCodes.Beq ||</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;                    cili.Code == OpCodes.Beq_S)</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;                {</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;                    <span class="comment">// State -3 exists only in debug builds and skips the whole FSM =&gt; irrelevant</span></div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;                    <span class="keywordflow">if</span> (stateValue != -3)</div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;                    {</div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;                        q.Enqueue(Tuple.Create(stateValue, entry.Successors[1]));</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;                    }</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;                    q.Enqueue(Tuple.Create(-1, entry.Successors[0]));</div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;                }</div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;                <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cili.Code == OpCodes.Switch)</div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;                {</div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;                    <span class="keywordtype">bool</span> have_1 = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;                    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i &lt; entry.Successors.Length; i++)</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;                    {</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;                        <span class="keywordtype">int</span> state = i - 1 + stateOffset;</div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;                        <span class="comment">// State -3 exists only in debug builds and skips the whole FSM =&gt; irrelevant</span></div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;                        <span class="comment">// State -2 is completion state =&gt; also irrelevant</span></div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;                        <span class="keywordflow">if</span> (state &gt;= -1)</div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;                        {</div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;                            q.Enqueue(Tuple.Create(state, entry.Successors[i]));</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;                            <span class="keywordflow">if</span> (state == -1)</div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;                                have_1 = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;                        }</div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;                    }</div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;                    <span class="keywordflow">if</span> (!have_1)</div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;                        q.Enqueue(Tuple.Create(-1, entry.Successors[0]));</div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;                }</div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;            }</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;            var stateDic = <span class="keyword">new</span> SortedDictionary&lt;int, MSILCodeBlock&gt;();</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;            <span class="keywordflow">while</span> (q.Any())</div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;            {</div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;                var tup = q.Dequeue();</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;                <span class="keywordtype">int</span> state = tup.Item1;</div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;                var block = tup.Item2;</div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;</div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;                <span class="keywordtype">int</span> value;</div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;                <span class="keywordflow">if</span> (IsLdloc(block.Range.First(), out value) &amp;&amp;</div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;                    value == stateLocalIndex)</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;                {</div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;                    <span class="keywordflow">if</span> (block.Range.Count != 3)</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;                        <span class="keywordflow">throw</span> <span class="keyword">new</span> NotSupportedException(<span class="stringliteral">&quot;Decompilation of await pattern failed: expected 3 instructions in this block.&quot;</span>);</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;                    <span class="keywordflow">if</span> (!IsLdc_I(block.Range[1], out stateValue))</div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;                        <span class="keywordflow">throw</span> <span class="keyword">new</span> NotSupportedException(<span class="stringliteral">&quot;Decompilation of await pattern failed: expected Ldc_I&lt;x&gt; op-code.&quot;</span>);</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;                    <span class="keywordflow">if</span> (block.Range[2].Code != OpCodes.Beq &amp;&amp;</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;                        block.Range[2].Code != OpCodes.Beq_S)</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;                        <span class="keywordflow">throw</span> <span class="keyword">new</span> NotSupportedException(<span class="stringliteral">&quot;Decompilation of await pattern failed: expected Beq/Beq_S op-code.&quot;</span>);</div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;                    q.Enqueue(Tuple.Create(stateValue, block.Successors[1]));</div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;                    q.Enqueue(Tuple.Create(-1, block.Successors[0]));</div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;                }</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;                <span class="keywordflow">else</span></div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;                {</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;                    stateDic[state] = block;</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;                }</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;            }</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> state = -1; state &lt; stateDic.Count - 1; state++)</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;            {</div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;                <span class="keywordflow">if</span> (!stateDic.ContainsKey(state))</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;                    <span class="keywordflow">throw</span> <span class="keyword">new</span> NotSupportedException(<span class="stringliteral">&quot;Decompilation of await pattern failed: expected consecutive states from -1 to &quot;</span> + (stateDic.Count-1));</div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;            }</div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;            <span class="keywordflow">return</span> stateDic.Values.ToArray();</div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;        }</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    }</div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;}</div>
<div class="ttc" id="class_s_d_i_l_reader_1_1_i_l_instruction_html"><div class="ttname"><a href="class_s_d_i_l_reader_1_1_i_l_instruction.html">SDILReader.ILInstruction</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_l_instruction_8cs_source.html#l00029">ILInstruction.cs:29</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_m_s_i_l_code_block_html"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_m_s_i_l_code_block.html">SystemSharp.Analysis.MSILCodeBlock</a></div><div class="ttdoc">A specialization for basic blocks of CLI methods </div><div class="ttdef"><b>Definition:</b> <a href="_m_s_i_l_analysis_8cs_source.html#l00665">MSILAnalysis.cs:665</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_proceed_with_state_info_html"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_proceed_with_state_info.html">SystemSharp.Analysis.ProceedWithStateInfo</a></div><div class="ttdoc">Very preliminary and subject to change, therefore not documented, sorry... </div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00100">AsyncStateMachineHelpers.cs:100</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_co_f_s_m_html_acc4c07bc72fc60e06c55143886abe59b"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#acc4c07bc72fc60e06c55143886abe59b">SystemSharp.Analysis.CoFSM.ResultVar</a></div><div class="ttdeci">Variable ResultVar</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00129">AsyncStateMachineHelpers.cs:129</a></div></div>
<div class="ttc" id="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms_html_a3ef4f957ec1640579fd5acb0e4630843"><div class="ttname"><a href="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms.html#a3ef4f957ec1640579fd5acb0e4630843">SystemSharp.Analysis.CoFSMs.CreateOrder</a></div><div class="ttdeci">void CreateOrder()</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00160">AsyncStateMachineHelpers.cs:160</a></div></div>
<div class="ttc" id="class_s_d_i_l_reader_1_1_i_l_instruction_html_ac95902d23bb8b8c11b72fa7f59639fcd"><div class="ttname"><a href="class_s_d_i_l_reader_1_1_i_l_instruction.html#ac95902d23bb8b8c11b72fa7f59639fcd">SDILReader.ILInstruction.Code</a></div><div class="ttdeci">OpCode Code</div><div class="ttdef"><b>Definition:</b> <a href="_i_l_instruction_8cs_source.html#l00039">ILInstruction.cs:39</a></div></div>
<div class="ttc" id="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms_html_ab17d0f878ab09b9bb7a8435957aae3d5"><div class="ttname"><a href="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms.html#ab17d0f878ab09b9bb7a8435957aae3d5">SystemSharp.Analysis.CoFSMs.Order</a></div><div class="ttdeci">List&lt; CoFSM &gt; Order</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00144">AsyncStateMachineHelpers.cs:144</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_state_info_html_a2c609a341d466fba051b3cf317439d37"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_state_info.html#a2c609a341d466fba051b3cf317439d37">SystemSharp.Analysis.StateInfo.Fork</a></div><div class="ttdeci">StateInfo Fork(int ilState)</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00083">AsyncStateMachineHelpers.cs:83</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_proceed_with_state_info_html_ab4bd00bfc13b96df79cfa9ee5781ff9f"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_proceed_with_state_info.html#ab4bd00bfc13b96df79cfa9ee5781ff9f">SystemSharp.Analysis.ProceedWithStateInfo.ToString</a></div><div class="ttdeci">override string ToString()</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00106">AsyncStateMachineHelpers.cs:106</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_state_info_html_acc7f4209e0db0fda4f3c4aaf2a690008"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_state_info.html#acc7f4209e0db0fda4f3c4aaf2a690008">SystemSharp.Analysis.StateInfo.Equals</a></div><div class="ttdeci">override bool Equals(object obj)</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00062">AsyncStateMachineHelpers.cs:62</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_co_f_s_m_html"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html">SystemSharp.Analysis.CoFSM</a></div><div class="ttdoc">Very preliminary and subject to change, therefore not documented, sorry... </div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00123">AsyncStateMachineHelpers.cs:123</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_co_f_s_m_html_a5f1f40f0bb2bdbfc75950f55d3a3d6de"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a5f1f40f0bb2bdbfc75950f55d3a3d6de">SystemSharp.Analysis.CoFSM.StateActiveVars</a></div><div class="ttdeci">List&lt; Variable &gt; StateActiveVars</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00131">AsyncStateMachineHelpers.cs:131</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_co_f_s_m_html_aa8dd7798c73563fb14aa00777fdee3ed"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#aa8dd7798c73563fb14aa00777fdee3ed">SystemSharp.Analysis.CoFSM.DoneVar</a></div><div class="ttdeci">Variable DoneVar</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00130">AsyncStateMachineHelpers.cs:130</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_meta_1_1_method_descriptor_html"><div class="ttname"><a href="class_system_sharp_1_1_meta_1_1_method_descriptor.html">SystemSharp.Meta.MethodDescriptor</a></div><div class="ttdoc">Describes a method. </div><div class="ttdef"><b>Definition:</b> <a href="_components_reflection_8cs_source.html#l01702">ComponentsReflection.cs:1702</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_sys_d_o_m_1_1_variable_html"><div class="ttname"><a href="class_system_sharp_1_1_sys_d_o_m_1_1_variable.html">SystemSharp.SysDOM.Variable</a></div><div class="ttdoc">A local variable. </div><div class="ttdef"><b>Definition:</b> <a href="_literals_8cs_source.html#l00195">Literals.cs:195</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_co_f_s_m_html_a629ebbae6807ec1ba222899b70309552"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a629ebbae6807ec1ba222899b70309552">SystemSharp.Analysis.CoFSM.Dependencies</a></div><div class="ttdeci">ISet&lt; Task &gt; Dependencies</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00126">AsyncStateMachineHelpers.cs:126</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_sys_d_o_m_1_1_statement_html"><div class="ttname"><a href="class_system_sharp_1_1_sys_d_o_m_1_1_statement.html">SystemSharp.SysDOM.Statement</a></div><div class="ttdoc">Abstract base class for a SysDOM statement. </div><div class="ttdef"><b>Definition:</b> <a href="_algorithms_8cs_source.html#l00059">Algorithms.cs:59</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_method_code_html"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_method_code.html">SystemSharp.Analysis.MethodCode</a></div><div class="ttdoc">A control-flow graph specialization for CLI methods </div><div class="ttdef"><b>Definition:</b> <a href="_m_s_i_l_analysis_8cs_source.html#l00487">MSILAnalysis.cs:487</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_co_f_s_m_html_aad19cb7a3f9ddd9f1767e060607c11be"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#aad19cb7a3f9ddd9f1767e060607c11be">SystemSharp.Analysis.CoFSM.Method</a></div><div class="ttdeci">MethodDescriptor Method</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00127">AsyncStateMachineHelpers.cs:127</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_state_info_html_af9fa637972f7f9abd6dc7e0b9ce28db8"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_state_info.html#af9fa637972f7f9abd6dc7e0b9ce28db8">SystemSharp.Analysis.StateInfo.StateInfo</a></div><div class="ttdeci">StateInfo(int ilState)</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00056">AsyncStateMachineHelpers.cs:56</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_co_f_s_m_html_a534507292552a45f828fc5ef9c93601f"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a534507292552a45f828fc5ef9c93601f">SystemSharp.Analysis.CoFSM.CalledMethods</a></div><div class="ttdeci">ICollection&lt; MethodCallInfo &gt; CalledMethods</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00134">AsyncStateMachineHelpers.cs:134</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_state_info_html_a11a17a2892aba352521bf0104f73c9d9"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_state_info.html#a11a17a2892aba352521bf0104f73c9d9">SystemSharp.Analysis.StateInfo.ToString</a></div><div class="ttdeci">override string ToString()</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00078">AsyncStateMachineHelpers.cs:78</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_state_info_html"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_state_info.html">SystemSharp.Analysis.StateInfo</a></div><div class="ttdoc">Very preliminary and subject to change, therefore not documented, sorry... </div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00046">AsyncStateMachineHelpers.cs:46</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_co_f_s_m_html_a362133fe9c61244ad4cfd86b0371e0c6"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a362133fe9c61244ad4cfd86b0371e0c6">SystemSharp.Analysis.CoFSM.HandlerBody</a></div><div class="ttdeci">Statement HandlerBody</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00133">AsyncStateMachineHelpers.cs:133</a></div></div>
<div class="ttc" id="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms_html"><div class="ttname"><a href="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms.html">SystemSharp.Analysis.CoFSMs</a></div><div class="ttdoc">Very preliminary and subject to change, therefore not documented, sorry... </div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00141">AsyncStateMachineHelpers.cs:141</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_state_target_finder_html_af77c14655a6c79277e3e4060e6376c88"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_state_target_finder.html#af77c14655a6c79277e3e4060e6376c88">SystemSharp.Analysis.StateTargetFinder.FindStateTargets</a></div><div class="ttdeci">static MSILCodeBlock[] FindStateTargets(MethodCode cfg)</div><div class="ttdoc">Given a control-flow graph of an asynchronous method, finds all state entry points. This is done using some pattern matching and knowledge on how the compiler translates asynchronous methods. Therefore, some special cases might not be resolved correctly, and the code might break down with future compiler revisions. </div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00325">AsyncStateMachineHelpers.cs:325</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_state_info_html_a7d2942457d7497caabcef32d192c9ac3"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_state_info.html#a7d2942457d7497caabcef32d192c9ac3">SystemSharp.Analysis.StateInfo.GetHashCode</a></div><div class="ttdeci">override int GetHashCode()</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00072">AsyncStateMachineHelpers.cs:72</a></div></div>
<div class="ttc" id="class_s_d_i_l_reader_1_1_i_l_instruction_html_aad0d860f180f9616294ab5c9977d71a9"><div class="ttname"><a href="class_s_d_i_l_reader_1_1_i_l_instruction.html#aad0d860f180f9616294ab5c9977d71a9">SDILReader.ILInstruction.Operand</a></div><div class="ttdeci">object Operand</div><div class="ttdef"><b>Definition:</b> <a href="_i_l_instruction_8cs_source.html#l00045">ILInstruction.cs:45</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_co_f_s_m_html_a4930ff595c91c60e9c4c8f0eadb19463"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a4930ff595c91c60e9c4c8f0eadb19463">SystemSharp.Analysis.CoFSM.Order</a></div><div class="ttdeci">int Order</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00135">AsyncStateMachineHelpers.cs:135</a></div></div>
<div class="ttc" id="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms_html_a7b27742a238ce2a054511fd129fe47a0"><div class="ttname"><a href="struct_system_sharp_1_1_analysis_1_1_co_f_s_ms.html#a7b27742a238ce2a054511fd129fe47a0">SystemSharp.Analysis.CoFSMs.Map</a></div><div class="ttdeci">Dictionary&lt; Task, CoFSM &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00143">AsyncStateMachineHelpers.cs:143</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_co_f_s_m_html_a66e4114b306fd5b4be7da2b8c3ed298e"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a66e4114b306fd5b4be7da2b8c3ed298e">SystemSharp.Analysis.CoFSM.InitialHandler</a></div><div class="ttdeci">Statement InitialHandler</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00132">AsyncStateMachineHelpers.cs:132</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_join_params_html"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_join_params.html">SystemSharp.Analysis.JoinParams</a></div><div class="ttdoc">Very preliminary and subject to change, therefore not documented, sorry... </div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00037">AsyncStateMachineHelpers.cs:37</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_co_f_s_m_html_a4e09b0629b5e455ea5729a8de65bf060"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#a4e09b0629b5e455ea5729a8de65bf060">SystemSharp.Analysis.CoFSM.Arguments</a></div><div class="ttdeci">Variable[] Arguments</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00128">AsyncStateMachineHelpers.cs:128</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_state_target_finder_html"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_state_target_finder.html">SystemSharp.Analysis.StateTargetFinder</a></div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00169">AsyncStateMachineHelpers.cs:169</a></div></div>
<div class="ttc" id="interface_system_sharp_1_1_analysis_1_1_i_decompilation_result_html"><div class="ttname"><a href="interface_system_sharp_1_1_analysis_1_1_i_decompilation_result.html">SystemSharp.Analysis.IDecompilationResult</a></div><div class="ttdoc">This interface models the result of a decompilation </div><div class="ttdef"><b>Definition:</b> <a href="_m_s_i_l_decompiler_8cs_source.html#l04418">MSILDecompiler.cs:4418</a></div></div>
<div class="ttc" id="class_system_sharp_1_1_analysis_1_1_co_f_s_m_html_af50c75c629929330cd001b704e9d31ec"><div class="ttname"><a href="class_system_sharp_1_1_analysis_1_1_co_f_s_m.html#af50c75c629929330cd001b704e9d31ec">SystemSharp.Analysis.CoFSM.CoTask</a></div><div class="ttdeci">Task CoTask</div><div class="ttdef"><b>Definition:</b> <a href="_async_state_machine_helpers_8cs_source.html#l00125">AsyncStateMachineHelpers.cs:125</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_bb5e995590685548b7e11478911ee7c3.html">SystemSharp-Google-SVN</a></li><li class="navelem"><a class="el" href="dir_8deefa4467a62b572b52d238d562b104.html">SystemSharp</a></li><li class="navelem"><a class="el" href="dir_0e5a72156f8560bbc472a395da2569d6.html">SystemSharp</a></li><li class="navelem"><a class="el" href="dir_9d3c30b4336bd92c64ccf0aeee487ace.html">SystemSharp</a></li><li class="navelem"><a class="el" href="dir_d5bda8a155622a5a3d520660116af4c1.html">Analysis</a></li><li class="navelem"><a class="el" href="_async_state_machine_helpers_8cs.html">AsyncStateMachineHelpers.cs</a></li>
    <li class="footer">Generated on Thu Dec 26 2013 14:21:36 for SystemSharp by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6 </li>
  </ul>
</div>
</body>
</html>
